package br.com.fatecmc.propriedade.core.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.endereco.domain.Endereco;
import br.com.fatecmc.persephone.propriedade.domain.Propriedade;
import br.com.fatecmc.persephone.proprietario.domain.Proprietario;
import br.com.fatecmc.persephone.util.Telefone;

public class DAOPropriedade extends AbstractDAO {

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try{
			Propriedade p = (Propriedade) obj;
			conexao.getConexao().createStatement(); 
	        String sql =  "INSERT INTO tb_propriedades (cnpj, area_total, end_rua, end_bairro, end_complemento, end_id_cidade" +
	        			"telefone1_ddd, telefone1_numero, " +
	            		"telefone2_ddd, telefone2_numero, " +
	            		"telefone3_ddd, telefone3_numero)  VALUES(?,?,?,?,?,?,?,?,?,?)";
	        PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
	        pstm.setString(1, p.getCnpj());
	        pstm.setDouble(2, p.getAreaTotal());
	        pstm.setString(3, p.getEndereco().getRua());
	        pstm.setString(4, p.getEndereco().getBairro());
	        pstm.setString(5, p.getEndereco().getComplemento());
	        pstm.setInt(6, p.getEndereco().getCidade().getId());
            int contador = 10;
            for(Telefone tel : p.getTelefones()){
            	pstm.setString(contador++,tel.getDdd());
 	            pstm.setString(contador++, tel.getNumero());
 	          
            }
            for(int i=contador;i<16;i++){
            	pstm.setString(contador++, null);
	 	          
            }

	        pstm.executeUpdate();
	        pstm.close();
	        conexao.getConexao().close();
		}catch(SQLException ex) {
            Logger.getLogger(DAOPropriedade.class.getName()).log(Level.SEVERE, null, ex);			
		}
		
	}

	@Override
	public Entidade alterar(Entidade obj) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean excluir(Entidade obj) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Collection consultar(Entidade obj) {
        try {
            Propriedade p = (Propriedade) obj;
            String sql ="";
            PreparedStatement pstm;
            conexao.getConexao().createStatement();

    		sql ="SELECT * from tb_propriedades where id_propriedade = (select id_propriedade from tb_proprietarios_propriedades where id_proprietario = ?)"; 
            pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, p.getProprietarios().get(0).getId());
            
            ResultSet rs = pstm.executeQuery();
            ArrayList<Entidade> lista = new ArrayList<Entidade>();
            while (rs.next()) {     
            	Propriedade pro = new Propriedade();
                pro.setId(rs.getInt("id_propriedade"));  
                pro.setAreaTotal(rs.getDouble("area_total"));
                pro.setAreaProducao(rs.getDouble("area_producao"));
                pro.setCnpj(rs.getString("cnpj"));
                pro.setPossuiTalaoNotaFiscal(rs.getBoolean("possui_talao_nf_flg"));
                
                Endereco end = new Endereco();
                end.setRua(rs.getString("end_rua"));
                end.setComplemento(rs.getString("end_complemento"));
                end.setNumero(rs.getString("end_numero"));
                end.setBairro(rs.getString("end_bairro"));
                end.setCep(rs.getString("end_cep"));
                
                pro.setEndereco(end);
                
                Telefone tel1 = new Telefone();
                Telefone tel2 = new Telefone();
                Telefone tel3 = new Telefone();
                tel1.setDdd(rs.getString("telefone1_ddd"));
                tel1.setNumero(rs.getString("telefone1_numero"));
                
                tel2.setDdd(rs.getString("telefone2_ddd"));
                tel2.setNumero(rs.getString("telefone2_numero"));
                
                tel3.setDdd(rs.getString("telefone3_ddd"));
                tel3.setNumero(rs.getString("telefone3_numero"));
                
                ArrayList<Telefone> tels = new ArrayList<Telefone>();
                tels.add(tel1);
                tels.add(tel2);
                tels.add(tel3);
                
                pro.setTelefones(tels);
                
                lista.add(pro);
                
                
            }  
            conexao.getConexao().close();
            pstm.close();
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(DAOPropriedade.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
	}
}
